package com.leandro.CalendarioDeCompromissos.persistencia;

import java.util.ArrayList;
import java.util.List;

import com.leandro.CalendarioDeCompromissos.modelo.Data;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;

public class DataDAO {

	public static final String NOME_TABELA = "Data";
	public static final String COLUNA_ANO = "ano";
	public static final String COLUNA_MES = "mes";
	public static final String COLUNA_DIA = "dia";
	public static final String COLUNA_HORA = "hora";
	public static final String COLUNA_MINUTO = "minuto";
	public static final String COLUNA_CODIGO = "codigo";

	public static final String SCRIPT_CRIACAO_TABELA_DATA = "CREATE TABLE "
			+ NOME_TABELA + "(" + COLUNA_ANO + " INTEGER," + COLUNA_MES
			+ " INTEGER," + COLUNA_DIA + " INTEGER," + COLUNA_HORA
			+ " INTEGER," + COLUNA_MINUTO + " INTEGER," + COLUNA_CODIGO
			+ " INTEGER PRIMARY KEY NOT NULL AUTO_INCREMENT" + ")";

	public static final String SCRIPT_DELECAO_TABELA = "DROP TABLE IF EXISTS "
			+ NOME_TABELA;

	private SQLiteDatabase db = null;

	private static DataDAO instance;

	public DataDAO(Context context) {
		PersistenceHelper persistenceHelper = PersistenceHelper
				.getInstance(context);
		db = persistenceHelper.getWritableDatabase();
	}

	public static DataDAO getInstance(Context context) {
		if (instance == null)
			instance = new DataDAO(context);
		return instance;
	}

	public void salvarData(Data data) {

		ContentValues cv = new ContentValues();

		cv.put(COLUNA_ANO, data.getAno());
		cv.put(COLUNA_MES, data.getMes());
		cv.put(COLUNA_DIA, data.getDia());
		cv.put(COLUNA_HORA, data.getHora());
		cv.put(COLUNA_MINUTO, data.getMinuto());

		db.insert(NOME_TABELA, null, cv);

	}

	public List<Data> recuperarDatas() {
		String query = "SELECT * FROM " + NOME_TABELA;
		Cursor cursor = db.rawQuery(query, null);
		List<Data> data = preencherDatasCursor(cursor);

		return data;
	}

	public void deletarData(Data data) {

		String query = "DELETE FROM " + NOME_TABELA + " WHERE " + COLUNA_CODIGO
				+ " = " + data.getCodigo();

		db.execSQL(query);

	}

	public void editarData(Data data) {

		ContentValues cv = new ContentValues();

		cv.put(COLUNA_ANO, data.getAno());
		cv.put(COLUNA_MES, data.getMes());
		cv.put(COLUNA_DIA, data.getDia());
		cv.put(COLUNA_HORA, data.getHora());
		cv.put(COLUNA_MINUTO, data.getMinuto());

		db.update(NOME_TABELA, cv, COLUNA_CODIGO + "=" + data.getCodigo(), null);

	}

	public List<Data> preencherDatasCursor(Cursor cursor) {
		List<Data> datas = new ArrayList<Data>();

		if (cursor == null)
			return datas;

		try {
			if (cursor.moveToFirst()) {
				do {
					int indexAno = cursor.getColumnIndex(COLUNA_ANO);
					int indexMes = cursor.getColumnIndex(COLUNA_MES);
					int indexDia = cursor.getColumnIndex(COLUNA_DIA);
					int indexHora = cursor.getColumnIndex(COLUNA_HORA);
					int indexMinuto = cursor.getColumnIndex(COLUNA_MINUTO);
					int indexCodigo = cursor.getColumnIndex(COLUNA_CODIGO);

					int ano = cursor.getInt(indexAno);
					int mes = cursor.getInt(indexMes);
					int dia = cursor.getInt(indexDia);
					int hora = cursor.getInt(indexHora);
					int minuto = cursor.getInt(indexMinuto);
					int codigo = cursor.getInt(indexCodigo);

					Data data = new Data(ano, mes, dia, hora, minuto, codigo);
					datas.add(data);
				} while (cursor.moveToNext());
			}
		} finally {
			cursor.close();
		}

		return datas;

	}
}
